完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-17
在 Day 16,我們完成了 JWT + RBAC,讓平台具備了「誰可以做什麼」的基礎能力。
但在多人使用的情境裡,光有權限控制還不夠,我們還需要知道 「誰做了什麼、何時做的、結果如何」 —— 這就是 Audit Log 的價值。
想像這些場景:
Audit Log 的角色不是強化功能,而是讓系統 可追溯、可稽核、可調試。這代表平台從「能運作」走向「能管理」。
這次我建立了一個 最小可用的 Audit Log 子系統,包含紀錄與查詢兩部分。
Audit Log 模組
save_audit_log()
與 get_audit_logs()
函式FastAPI Middleware
AuditLogMiddleware
user_id
、role
、method、path、status_code查詢 API
新增 /audit/logs
端點
支援篩選條件:
user_id
(查詢特定使用者)role
(區分 admin/user)start_time, end_time
(依時間範圍篩選)limit
(限制回傳筆數)範例輸出:
[
{
"user_id": "admin",
"role": "admin",
"method": "GET",
"path": "/tasks",
"status_code": 200,
"timestamp": "2025-09-20 21:30:01"
},
{
"user_id": "user123",
"role": "user",
"method": "POST",
"path": "/train",
"status_code": 200,
"timestamp": "2025-09-20 21:31:45"
}
]
落地效益
未來優化方向
Audit Log 雖然不會讓模型更快或更準,但它讓平台 真正具備了產品級的可追溯性。
使用者的操作有跡可循,異常情況能夠調查,管理員也能透過 API 快速查詢與稽核。這一步不僅讓系統更透明,也讓多人協作變得更安全、更有秩序。
未來,當我們進一步整合多租戶設計與資源治理時,Audit Log 將不只是「輔助功能」,而會成為系統可靠性與透明度的核心支柱。
📎 AI 協作記錄:今日開發指令
1. 新增 Audit Log 模組
功能:
- init_audit_table()
- save_audit_log(user_id, role, method, path, status_code)
- AuditLogMiddleware
- get_audit_logs(...)
2. 在 FastAPI 主程式載入 Middleware
修改內容:
- 匯入並註冊 AuditLogMiddleware
- 確保所有請求都會被攔截並寫入紀錄
3. 新增查詢 API
功能:
- 新增 /audit/logs 端點
- 支援條件篩選:user_id、role、start_time、end_time、limit